/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import gamebook.Evento;
import gamebook.Paginacion;
import gamebook.UsuarioGenerico;
import gamebook.Utilidades;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author JAVA
 */
public class eventoServlet extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, ParseException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            

            //Opcion: puede ser publicarPost o publicarComentario
            String opcion = request.getParameter("opcion");
            
            //Ruta para cualquier sendRedirect
            String ruta = getServletContext().getContextPath();
                       
            //Array para los errores
            List<String> mensajes = new ArrayList<String>();
            
            //Cogemos el número de la página que estamos (GET:pag), si no hay es la primera página
            int pagina = Paginacion.cogePagDeGet(request.getParameter("pag"));            
            
                    //Cogemos los parámetros de la petición
                    String titulo = request.getParameter("eve_tit");
                    String descripcion = request.getParameter("eve_des");
                    String direccion = request.getParameter("eve_dir");
                    //Creamos el Date, pero todavía está vacío
                    Date fEvento = null;

                    //Verificamos que los campos sean correctos
                    if (titulo.length() < 3) {
                        //Título no válido
                        mensajes.add("El campo Título esta mal introducido");
                    }
                    
                    if (descripcion.length() < 3) {
                        //Apellidos demasiado pequeños
                        mensajes.add("El campo Descripción esta mal introducido");
                    }

                    //comprobacion de una fecha valida
                    int dia = Integer.parseInt(request.getParameter("diaReg"));
                    int mes = Integer.parseInt(request.getParameter("mesReg"));
                    int anyo = Integer.parseInt(request.getParameter("anyoReg"));
                    boolean esFechaValida = Utilidades.esFechaValida(dia, mes, anyo);
                    if (!esFechaValida) {
                        mensajes.add("La fecha introducida no es valida");
                    } else {
                        DateFormat dfm = new SimpleDateFormat("dd-MM-yyyy");
                        fEvento = dfm.parse(request.getParameter("diaReg") + "-" + request.getParameter("mesReg") + "-" + request.getParameter("anyoReg"));
                    }

                    //Si después de todas las comprobaciones hay algún error...
                    if (mensajes.size() > 0) {
                        //...metemos los errores en el request y devolvemos el control a perfil.jsp
                        request.setAttribute("mensajesRegistro", mensajes);
                        request.getRequestDispatcher("/evento.jsp").forward(request, response);
                    } else {
                        //Si todo está bien agregamos el evento y volvemos a muro.jsp con un mensaje de éxito
                        HttpSession session=request.getSession();
                        UsuarioGenerico usuario=(UsuarioGenerico)session.getAttribute("usuario");
                        
                        Evento evento = new Evento(titulo,descripcion,fEvento, usuario, direccion);
                        
                        boolean resultado = evento.nuevoEvento();
                        
                        //Si hubo algún error al darle de alta, guardamos el error y volvemos a index
                        if (resultado) {
                            request.setAttribute("registroOk", "1");
                            request.getRequestDispatcher("/muro.jsp").forward(request, response);
                        } else {
                            mensajes.add("No ha sido posible agregar el evento");
                            request.setAttribute("mensajesRegistro", mensajes);
                            request.getRequestDispatcher("/evento.jsp").forward(request, response);
                        }

                    }            
              
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (ParseException ex) {
            Logger.getLogger(eventoServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(eventoServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (ParseException ex) {
            Logger.getLogger(eventoServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(eventoServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
